#include "include.h"
#include "func.h"

#if FUNC_I2S_EN

//AT(.text.i2s.sync)
//bool cfg_i2s_slave_start_level(void)    //IIS 收到的声音，从DAC出来后，如果左右声道相反了，可以改变这个返回值调换左右声道
//{
//    return 1;   //0 IIS_LRC电平低变高时打开IIS接收数据   //1 IIS_LRC电平高变低时打开IIS接收数据
//}

//I2S接收模式,芯片作为从机,接收IIS信号并把声音从DAC输出，IIS需要更改配置为如下.
//关键要把 I2S_MODE_SEL(设置为slave),把I2S_DMA_EN(设置为DMA),其它根据实际情况选择
/*
#define I2S_EN                          1            //是否使能I2S功能  //默认是IIS作主机输出音乐,声音可以和DAC一起输出
#define I2S_DEVICE                      I2S_DEV_NO   //I2S设备选择
#define I2S_MAPPING_SEL                 I2S_GPIOA    //I2S IO口选择
#define I2S_MODE_SEL                    1            //I2S主从模式选择 0: master; 1:slave
#define I2S_BIT_MODE                    1            //I2S数据位宽选择 0:16bit; 1:32bit
#define I2S_DATA_MODE                   1            //I2S数据格式选择 0:left-justified mode; 1:normal mode
#define I2S_DMA_EN                      1            //I2S数据源选择 0:src; 1:dma
#define I2S_MCLK_EN                     0            //I2S是否打开MCLK
#define I2S_MCLK_SEL                    2            //I2S MCLK选择 0:64fs 1:128fs 2:256fs
#define I2S_PCM_MODE                    0            //I2S是否打开PCM mode
#define I2S_DATA_DIR                    0            //数据源选择dma时 1：slave->master；0：master->slave
#define DMA_IN_I2S_SEL                  NONE_DMA_I2S //I2S数据源选择DAM时,选择输入DMA的数据源
*/
f_i2s_t f_i2s;

static void func_i2s_process(void)
{
    func_process();
}

static void func_i2s_enter(void)
{
    memset(&f_i2s, 0, sizeof(f_i2s_t));

    func_i2s_enter_display();

    bsp_i2s_init();

    i2s_start();
}

static void func_i2s_exit(void)
{
    func_i2s_exit_display();
    bsp_i2s_exit();
    func_cb.last = FUNC_I2S;
}

AT(.text.func.i2s)
void func_i2s(void)
{
    printf("%s\n", __func__);

    func_i2s_enter();

    while (func_cb.sta == FUNC_I2S) {
        func_i2s_process();
        func_i2s_message(msg_dequeue());
        func_i2s_display();
    }

    func_i2s_exit();
}

#endif
